//         java.util.list接口 extends Collection接口
//             list的特点：
//            1、有序的集合，存储元素和取出元素是一致的
//            2、有索引，包含带索引的方法
//            3、允许存储重复的元素

//            常用方法：
//         -public void add(int index,E element):将指定的元素，添加到该集合中的指定位置上。
//         -public E get(int index):返回集合中指定位置的元素。
//         -public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。
//         -public E set(int index,E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
//
// 注意：防止索引越界异常

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class List01 {
    public static void main(String[] args) {
        //list是一个接口，arraylist是一个实现类
        List<String> list = new ArrayList<>();
        // -public void add(int index,E element):将指定的元素，添加到该集合中的指定位置上
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        //直接输出对象，不是一个地址说明重写了tostring方法
        System.out.println(list);
        // -public E get(int index):返回集合中指定位置的元素。
        String s = list.get(2);
        System.out.println("索引为2的元素是：" + s);

        //-public E remove(int index):移除列表中指定位置的元素,返回的是被移除的元素。
        String remove = list.remove(3);
        System.out.println("被移除的是：" + remove);
        System.out.println(list);

        //-public E set(int index,E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
        String hello = list.set(1, "hello");
        System.out.println("被取代的元素是：" + hello);
        System.out.println(list);

        //遍历list的方法
        //for循环
        System.out.println("for循环遍历list");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + "\t");
        }
        //迭代器循环
        System.out.println("\n" + "迭代器遍历list");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.print(next + "\t");
        }
        //增强for循环
        System.out.println("\n" + "增强for循环遍历list");
        for (String s1 : list) {
            System.out.print(s1 + "\t");
        }

        //索引越界异常
        //java.lang.IndexOutOfBoundsException
        // String s1 = list.get(5);

    }
}
